rsync实现文件服务器间文件同步

您所在的位置:网站首页 go 文件同步至ftp服务器 rsync实现文件服务器间文件同步

rsync实现文件服务器间文件同步

2024-01-05 20:16| 来源: 网络整理| 查看: 265

rsync介绍

rsync命令工具可以实现服务器间的文件同步(全量或者增量,比如使用–size-only来检查源端文件和目标端文件大小是否一致决定是否需要同步),由此同步的功能扩展,可以实现本机不同目录文件拷贝、快速删除海量文件等功能。但要注意,rsync不能实现远程服务器1和远程服务器2之间的文件同步,但是scp可以实现此功能。

rsync有几种工作模式

不管哪种模式,源文件都是在前面,目标文件在后面。 1)本地模式 语法:rsync [OPTION]… SRC [SRC]… DEST 如:rsync -av /tmp/test /data/test_bak/ 2)远程shell模式(使用一个单冒号 :) 原理:启动一个shell程序(如rsh,ssh) 语法: push模式(将本地文件push到远端):rsync [OPTION]… SRC [SRC]… [USER@]HOST:DEST pull模式(从远端pull文件到本地):rsync [OPTION]… [USER@]HOST:SRC [DEST] 如: rsync -av -e ‘ssh -p 18822’ /tmp/test1 10.144.54.186:/tmp/ #指定使用18822端口,因为有生产服务器使用的不是默认是22端口 3)rsync daemon模式(使用两个单冒号 ::) 原理:本地主机通过网络套接字连接远程主机上的rsync daemon push模式:rsync [OPTION]… SRC [SRC]… [USER@]HOST::DEST rsync [OPTION]… SRC rsync://[USER@]HOST[:PORT]/[DEST] 如: pull模式:rsync [OPTION]… [USER@]HOST::SRC [DEST] rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST] 如:

rsync -av --delete --progress --password-file=/etc/rsync_passwd [email protected]::share_data/test1_dir /home/service/app 连接RSYNC DAEMON

rsync也可以不使用远程shell作为传输方式。这情况看下,将直接连接远程RSYNC守护进程,一般使 用的是TCP的873端口。(显然,这要求远程的RSYNC守护进程必须是已运行的,见下文"启动RSYNC服务以接受连接请求") 这种方式的rsync使用方式和远程shell方式一样,除了: o 需要使用双冒号"::“分隔主机名和路径,或者使用rsync://的URL格式。 o “path"部分的第一个词语是一个模块名(译者注:如hostname::modname/file)。 o 远程RSYNC守护进程可能会输出你连接它的日期时间。 o 如果没有指定远程rsync服务的路径名,将列出rsync服务主机上可访问的路径。 o 如果没有指定本地目标地址,将列出远程rsync服务主机上指定的文件。 o 必须不能指定”–rsh”("-e")选项。 以下是拷贝远程模块名为"src"中的所有文件示例: rsync -av host::src /dest 远程daemon上的某些模块可能需要身份验证。如果是这样,在连接时将会被询问输入密码。如果想要 避免被询问,可以通过设置环境变量RSYNC_PASSWORD的值为你要使用的密码,或者使用选项 “–password-file”。这非常适用于脚本中。 警告:在某些系统上,环境变量是对所有用户可见的,此时建议使用"–password-file"选项。 你可以通过web代理(web proxy)的方式与rsync daemon建立连接,只需设置环境变量RSYNC_PROXY的 值为hostname:port指向你的web代理。但要注意,web代理的配置必须得支持与873端口的代理连接。 你还可以使用代理程序与rsync daemon建立连接,只需设置环境变量RSYNC_CONNECT_PROG的值为你想 要运行的命令来代替建立套接字连接。环境变量的值中可能会包含"%H",它代表rsync命令中所指定 的主机名(因此如果想在值中包含一个"%“字符,需要使用”%%")。例如: export RSYNC_CONNECT_PROG=‘ssh proxyhost nc %H 873’ rsync -av targethost1::module/src/ /dest/ rsync -av rsync:: //targethost2/module/src/ /dest/ (双冒号后面没有空格) 上面的命令中使用ssh在proxyhost上运行了nc命令,它将会转发所有数据到目标主机(%H)的873端口。

启动RSYNC服务以接受连接请求

要连接到一个rsync daemon,远程系统上的rsync daemon必须已经运行(或者像inetd一样,已经配置 了当特殊端口上有连接时会派生出rsync daemon)。关于如何启动一个能处理从套接字进来的连接的 daemon的完整信息,请看rsyncd.conf(5),这是rsync daemon的配置文件,它包含如何运行daemon的 非常详细的信息(包括独立模式(stand-alone)和inetd格式的配置) 如果你使用的是某种远程shell传输方式,则没有手动启动rsync daemon的必要。

使用rsync daemon模式的实例

本实例采取从服务端pull的方式拉取文件到客户端(服务端:10.90.122.231,客户端:10.90.19.243) 1.服务端配置

1.创建配置文件 mkdir -p /etc/rsync cd /etc/rsync touch rsyncd.conf #必须 touch rsyncd.motd #可选 touch rsyncd.secrets #必须 chmod 600 rsyncd.secrets chown root:root rsyncd.secrets #用户必须和启动服务的用户保持一致 2.rsyncd.conf的配置: ## rsyncd.conf 文件的配置 # /etc/rsyncd: configuration file for rsync daemon mode # See rsyncd.conf man page for more options. # 传输文件使用的用户和用户组,如果是从服务器=>客户端,要保证www用户对文件有读取的权限;如果是从客户端=>服务端,要保证www对文件有写权限。 uid = service gid = service # 允许chroot,提升安全性,客户端连接模块,首先chroot到模块path参数指定的目录下,chroot为yes时必须使用root权限,且不能备份path路径外的链接文件 use chroot = yes # 只读 read only = no # 只写 write only = no # 设定白名单,可以指定IP段(172.18.50.1/255.255.255.0),各个Ip段用空格分开 hosts allow = * hosts deny = * # 允许的客户端最大连接数 max connections = 4 # 欢迎文件的路径,非必须 motd file = /etc/rsync/rsyncd.motd # pid文件路径 pid file = /etc/rsync/rsyncd.pid # 记录传输文件日志 transfer logging = yes # 日志文件格式 log format = %t %a %m %f %b # 指定日志文件 log file = /var/log/rsync.log # 剔除某些文件或目录,不同步 exclude = lost+found/ # 设置超时时间 timeout = 900 ignore nonreadable = yes # 设置不需要压缩的文件 dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 # 模块,可以配置多个,使用如: rsync_man@server_address::share_data [share_data] # 模块的根目录,同步目录,要注意权限 path = /tmp/zp/ # 是否允许列出模块内容 list = no # 忽略错误 ignore errors # 添加注释 comment = # 模块验证的用户名称,可使用空格或者逗号隔开多个用户名 auth users = rsync_man # 模块验证密码文件 可放在全局配置里 secrets file = /etc/rsync/rsyncd.secrets # 剔除某些文件或目录,不同步 exclude = lost+found/ 3.rsyncd.motd 配置(欢迎提示语)非必须 ++++++++++++++++++ sate zp : rsync start ++++++++++++++++++ 4.rsyncd.secrets的配置 rsync_man:oppo123 #rsync_man 是虚拟的同步用户,oppo123 要与客户端保持一致 5.启动rsync服务 rsync --daemon --config=/etc/rsync/rsyncd.conf

2.客户端配置

配置免密(非必须,如果不配置,会提示输入密码) echo "oppo123" > /etc/rsync_passwd #路径随意,保证启动同步的用户有权限读取即可 chmod 600 /etc/rsync_passwd

3.客户端正式pull 来同步

rsync -av --delete --progress --password-file=/etc/rsync_passwd [email protected]::share_data /tmp/zp/ 遇到的报错

1.file has vanished: "/crx-quickstart/repository/repository/datastore/tmp/upload2358902225285307139.tmp" (in server_data) A: 这个报错表示,rsync同步开始时标记这个文件需要同步,真正去同步的时候,发现这个文件不存在了,可能是这个过程中,该文件被源端删除了。遇到这个错误,不影响rsync的备份结果,只不过rsync的执行码不会是0 ,而是23或者24。

参考文档

rsync官方网站: https://www.samba.org/ftp/rsync/rsync.html rsync配置选项介绍(中文):https://www.cnblogs.com/f-ck-need-u/p/7221713.html rsync介绍:https://blog.csdn.net/qq_32706349/article/details/91451053 rsync常见错误:http://blog.sina.com.cn/s/blog_4da051a60101h8am.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3